home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet internetowy / Rozne / HTTrack 3.40-2 / httrack-3.40-2.exe / {app} / src_win / WinHTTrack / OptionTab7.cpp < prev    next >
C/C++ Source or Header  |  2004-01-24  |  10KB  |  341 lines

  1. // OptionTab7.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "Shell.h"
  6. #include "OptionTab7.h"
  7. #include "AddFilter.h"
  8.  
  9. /* basic HTTrack defs */
  10. extern "C" {
  11.   #include "HTTrackInterface.h"
  12.   #include "htsglobal.h"
  13.   #include "htsbase.h"
  14. }
  15.  
  16. #ifdef _DEBUG
  17. #define new DEBUG_NEW
  18. #undef THIS_FILE
  19. static char THIS_FILE[] = __FILE__;
  20. #endif
  21.  
  22. /////////////////////////////////////////////////////////////////////////////
  23. // COptionTab7 property page
  24.  
  25. IMPLEMENT_DYNCREATE(COptionTab7, CPropertyPage)
  26.  
  27. COptionTab7::COptionTab7() : CPropertyPage(COptionTab7::IDD)
  28. {
  29.   // Patcher titre
  30.   if (LANG_T(-1)) {    // Patcher en franτais
  31.     m_psp.pszTitle=LANG(LANG_IOPT7); // titre
  32.     m_psp.dwFlags|=PSP_USETITLE;
  33.   }
  34.   m_psp.dwFlags|=PSP_HASHELP;
  35.   //
  36.     //{{AFX_DATA_INIT(COptionTab7)
  37.     m_url2 = _T("");
  38.     //}}AFX_DATA_INIT
  39. }
  40.  
  41. COptionTab7::~COptionTab7()
  42. {
  43. }
  44.  
  45. void COptionTab7::DoDataExchange(CDataExchange* pDX)
  46. {
  47.     CPropertyPage::DoDataExchange(pDX);
  48.     //{{AFX_DATA_MAP(COptionTab7)
  49.     DDX_Text(pDX, IDC_URL2, m_url2);
  50.     //}}AFX_DATA_MAP
  51. }
  52.  
  53.  
  54. BEGIN_MESSAGE_MAP(COptionTab7, CPropertyPage)
  55.     //{{AFX_MSG_MAP(COptionTab7)
  56.     ON_BN_CLICKED(IDC_ADD1, OnAdd1)
  57.     ON_BN_CLICKED(IDC_ADD2, OnAdd2)
  58.     ON_BN_CLICKED(IDC_CHECK1, OnCheck1)
  59.     ON_BN_CLICKED(IDC_CHECK2, OnCheck2)
  60.     ON_BN_CLICKED(IDC_CHECK3, OnCheck3)
  61.     //}}AFX_MSG_MAP
  62.   ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  63. END_MESSAGE_MAP()
  64.  
  65. /////////////////////////////////////////////////////////////////////////////
  66. // COptionTab7 message handlers
  67.  
  68. void NewFilter(int i,char* s) {  // 0: forbid 1: accept
  69.   CAddFilter AddF;
  70.   AddF.type=i;
  71.   if (AddF.type==0)
  72.     AddF.m_addtype=LANG(LANG_B20); /*"Links following this rule will be forbidden:"*/
  73.   else
  74.     AddF.m_addtype=LANG(LANG_B21); // "Links following this rule will be accepted:";
  75.   if (AddF.DoModal()==IDOK) {
  76.     char query[2048],t[256],as[256];
  77.     char* q;
  78.  
  79.     // error
  80.     if (AddF.m_afquery.GetLength() >= sizeof(query) - 2 ) {
  81.       return;
  82.     }
  83.  
  84.     strcpybuff(s,"");
  85.     strcpybuff(query,AddF.m_afquery);
  86.     q=query;
  87.     
  88.     if (AddF.m_aftype==10) {
  89.       if (i==0)
  90.         strcpybuff(s,"-");
  91.       else
  92.         strcpybuff(s,"+");
  93.       strcatbuff(s,"*");
  94.     } else {
  95.       while(strlen(q)>0) {
  96.         while ((*q==' ') || (*q==',')) q++;
  97.         strcpybuff(t,"");
  98.         {  // prochain (sΘparΘ par des ,)
  99.           char *a,*b;
  100.           a=strchr(q,' ');
  101.           b=strchr(q,',');
  102.           if (a && b) {  // dΘpartager
  103.             if ((int) b < (int) a)
  104.               a=b;
  105.           } else if (b) a=b;
  106.           
  107.           if (a) {
  108.             strcpybuff (t,"");
  109.             strncat(t,q,(int) a-(int) q);
  110.             q=a+1;
  111.           } else {
  112.             strcpybuff(t,q);
  113.             strcpybuff(q,"");
  114.           }
  115.         }
  116.         
  117.         if (strlen(t)>0) {
  118.           strcpybuff(as,"");
  119.           switch (AddF.m_aftype) {
  120.           case 0:  // ext
  121.             sprintf(as,"*.%s",t);
  122.             break;
  123.           case 1:  // contient
  124.             sprintf(as,"*/*%s*",t);
  125.             break;
  126.           case 2:  // this one
  127.             sprintf(as,"*/%s",t);
  128.             break;
  129.           case 3:  // folder contains
  130.             sprintf(as,"*/*%s*/*",t);
  131.             break;
  132.           case 4:  // this folder
  133.             sprintf(as,"*/%s/*",t);
  134.             break;
  135.           case 5:  // domaine
  136.             sprintf(as,"*[name].%s/*",t);
  137.             break;
  138.           case 6:  // contien
  139.             sprintf(as,"*[name].*[name]%s*[name].*[name]/*",t);
  140.             break;
  141.           case 7:  // host
  142.             sprintf(as,"%s/*",t);
  143.             break;
  144.           case 8:  // link contient
  145.             sprintf(as,"*%s*",t);
  146.             break;
  147.           case 9:  // lien exact
  148.             sprintf(as,"%s",t);
  149.             break;
  150.           }
  151.           if (strlen(as)>0) {
  152.             if (i==0)
  153.               strcatbuff(s,"-");
  154.             else
  155.               strcatbuff(s,"+");
  156.             strcatbuff(s,as);
  157.             strcatbuff(s,"\x0d\x0a");
  158.           }
  159.         }
  160.       }
  161.       
  162.     }
  163.  
  164.   } else strcpybuff(s,"");
  165. }
  166.  
  167.  
  168. void COptionTab7::OnAdd1() 
  169. {
  170.   char s[1024]; s[0]='\0';
  171.   NewFilter(0,s);
  172.   if (strlen(s)>0) {
  173.     char tempo[HTS_URLMAXSIZE*16];
  174.     {
  175.       CString st;
  176.       GetDlgItemText(IDC_URL2,st);
  177.       if (st.GetLength() < sizeof(tempo) - 2)
  178.         strcpybuff(tempo,st);
  179.       else
  180.         tempo[0] = '\0';
  181.     }
  182.     if (strlen(tempo)>0) {
  183.       if ((tempo[strlen(tempo)-1]!=' ') && (tempo[strlen(tempo)-1]!='\n') && (tempo[strlen(tempo)-1]!=13))
  184.         strcatbuff(tempo,"\x0d\x0a");
  185.     }
  186.     strcatbuff(tempo,s);
  187.     //    m_url2=tempo;
  188.     SetDlgItemTextCP(this, IDC_URL2,tempo);
  189.   }
  190. }
  191.  
  192. void COptionTab7::OnAdd2() 
  193. {
  194.   char s[1024]; s[0]='\0';
  195.   NewFilter(1,s);
  196.   if (strlen(s)>0) {
  197.     char tempo[HTS_URLMAXSIZE*16];
  198.     {
  199.       CString st;
  200.       GetDlgItemText(IDC_URL2,st);
  201.       if (st.GetLength() < sizeof(tempo) - 2)
  202.         strcpybuff(tempo,st);
  203.       else
  204.         tempo[0] = '\0';
  205.     }
  206.     if (strlen(tempo)>0) {
  207.       if ((tempo[strlen(tempo)-1]!=' ') && (tempo[strlen(tempo)-1]!='\n') && (tempo[strlen(tempo)-1]!=13))
  208.         strcatbuff(tempo,"\x0d\x0a");
  209.     }
  210.     strcatbuff(tempo,s);
  211.     //    m_url2=tempo;
  212.     SetDlgItemTextCP(this, IDC_URL2,tempo);
  213.   }
  214. }
  215.  
  216. BOOL COptionTab7::OnInitDialog() 
  217. {
  218.     CPropertyPage::OnInitDialog();
  219.   EnableToolTips(true);     // TOOL TIPS
  220.  
  221.   // mode modif α la volΘe
  222.   if (modify==1) {
  223.     GetDlgItem(IDC_ADD1) ->ModifyStyle(0,WS_DISABLED);
  224.     GetDlgItem(IDC_ADD2) ->ModifyStyle(0,WS_DISABLED);
  225.     GetDlgItem(IDC_URL2) ->ModifyStyle(0,WS_DISABLED);
  226.     GetDlgItem(IDC_STATIC_finfo) ->ModifyStyle(0,WS_DISABLED);
  227.     GetDlgItem(IDC_STATIC_tip) ->ModifyStyle(0,WS_DISABLED);
  228.   } else {
  229.     GetDlgItem(IDC_ADD1) ->ModifyStyle(WS_DISABLED,0);
  230.     GetDlgItem(IDC_ADD2) ->ModifyStyle(WS_DISABLED,0);
  231.     GetDlgItem(IDC_URL2) ->ModifyStyle(WS_DISABLED,0);
  232.     GetDlgItem(IDC_STATIC_finfo) ->ModifyStyle(WS_DISABLED,0);
  233.     GetDlgItem(IDC_STATIC_tip) ->ModifyStyle(WS_DISABLED,0);
  234.   }
  235.  
  236.   // Patcher l'interface pour les Franτais ;-)
  237.   if (LANG_T(-1)) {    // Patcher en franτais
  238.     SetWindowTextCP(this, LANG(LANG_B9)); // "Filtres");
  239.     SetDlgItemTextCP(this, IDC_STATIC_finfo,LANG(LANG_B10)); // "Vous pouvez exclure ou accepter plusieurs URLs ou liens, en utilisant les jokers\nVous pouvez utiliser les virgules ou les espaces entre les filtres\nExemple: +*.zip,-www.*.com,-www.*.edu/cgi-bin/*.cgi");
  240.     SetDlgItemTextCP(this, IDC_ADD1,LANG(LANG_B11)); // "Exclure lien(s)..");
  241.     SetDlgItemTextCP(this, IDC_ADD2,LANG(LANG_B12)); // "Accepter lien(s)..");
  242.     SetDlgItemTextCP(this, IDC_STATIC_tip,LANG(LANG_B13)); // "Conseil: Si vous voulez accepter tous les fichiers gif d'un site, utilisez quelque chose comme +www.monweb.com/*.gif\n(+*.gif autorisera TOUS les fichiers gif sur TOUS les sites)");
  243.   }
  244.  
  245.     return TRUE;  // return TRUE unless you set the focus to a control
  246.                   // EXCEPTION: OCX Property Pages should return FALSE
  247. }
  248.  
  249.  
  250.  
  251. // ------------------------------------------------------------
  252. // TOOL TIPS
  253. //
  254. // ajouter dans le .cpp:
  255. // remplacer les deux Wid1:: par le nom de la classe::
  256. // dans la message map, ajouter
  257. // ON_NOTIFY_EX( TTN_NEEDTEXT, 0, OnToolTipNotify )
  258. // dans initdialog ajouter
  259. // EnableToolTips(true);     // TOOL TIPS
  260. //
  261. // ajouter dans le .h:
  262. // char* GetTip(int id);
  263. // et en generated message map
  264. // afx_msg BOOL OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult );
  265. BOOL COptionTab7::OnToolTipNotify( UINT id, NMHDR * pNMHDR, LRESULT * pResult )
  266. {
  267.   TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
  268.   UINT nID =pNMHDR->idFrom;
  269.   if (pTTT->uFlags & TTF_IDISHWND)
  270.   {
  271.     // idFrom is actually the HWND of the tool
  272.     nID = ::GetDlgCtrlID((HWND)nID);
  273.     if(nID)
  274.     {
  275.       char* st=GetTip(nID);
  276.       if (st != "") {
  277.         pTTT->lpszText = st;
  278.         pTTT->hinst = AfxGetResourceHandle();
  279.         return(TRUE);
  280.       }
  281.     }
  282.   }
  283.   return(FALSE);
  284. }
  285. char* COptionTab7::GetTip(int ID)
  286. {
  287.   switch(ID) {
  288.     case IDC_ADD1: return LANG(LANG_C1);   /*"Add refuse filter"*/ break;
  289.     case IDC_ADD2: return LANG(LANG_C2);   /*"Add accept filter"*/ break;
  290.     case IDC_URL2: return LANG(LANG_C3);   /*"Extra filters"*/ break;
  291.   }
  292.   return "";
  293. }
  294. // TOOL TIPS
  295. // ------------------------------------------------------------
  296.  
  297. void COptionTab7::EnsureIncluded(BOOL state, CString filter)  {
  298.   /* wipe all selected filters */
  299.   CString st;
  300.   CString ftok=filter;
  301.   GetDlgItemText(IDC_URL2,st);
  302.   ftok+=" ";
  303.   while(ftok.Find(' ')>=0) {
  304.     CString token=ftok.Mid(0,ftok.Find(' '));
  305.     ftok=ftok.Mid(ftok.Find(' ')+1);
  306.     ftok.TrimLeft();
  307.     st.Replace(token,"");
  308.     st.Replace("\r"," ");
  309.     st.Replace("\t"," ");
  310.     st.Replace("  "," ");
  311.     st.Replace(" \n","\n");
  312.     st.Replace("\n ","\n");
  313.     st.Replace("\n\n","\n");
  314.   }
  315.   st.TrimLeft();
  316.   st.TrimRight();
  317.   /* add ? */
  318.   if (state) {
  319.     st+="\n";
  320.     st+=filter;
  321.   }
  322.   st.Replace("\n","\r\n");      // W32 compatible
  323.   SetDlgItemTextCP(this, IDC_URL2,st);
  324. }
  325.  
  326.  
  327. void COptionTab7::OnCheck1() 
  328. {
  329.   EnsureIncluded(this->IsDlgButtonChecked(IDC_CHECK1),"+*.gif +*.jpg +*.png +*.tif +*.bmp");
  330. }
  331.  
  332. void COptionTab7::OnCheck2() 
  333. {
  334.   EnsureIncluded(this->IsDlgButtonChecked(IDC_CHECK2),"+*.zip +*.tar +*.tgz +*.gz +*.rar +*.z +*.exe");
  335. }
  336.  
  337. void COptionTab7::OnCheck3() 
  338. {
  339.   EnsureIncluded(this->IsDlgButtonChecked(IDC_CHECK3),"+*.mov +*.mpg +*.mpeg +*.avi +*.asf +*.mp3 +*.mp2 +*.rm +*.wav +*.vob +*.qt +*.vid +*.ac3 +*.wma +*.wmv");
  340. }
  341.